package com.xique.park.service.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.xique.common.core.web.domain.AjaxResult;
import com.xique.common.core.web.domain.PageResult;
import com.xique.park.bean.domain.ParkCar;
import com.xique.park.bean.request.web.parkcar.BlackCarRequest;
import com.xique.park.bean.request.web.parkcar.ParkCarRequest;
import com.xique.park.bean.search.app.ParkCarListSearch;

import java.util.List;

/**
 * 车辆Service接口
 *
 * @author xique
 * @date 2021-12-09
 */
public interface IParkCarService {

    /**
     * 查询车辆
     *
     * @param id 车辆ID
     * @return 车辆
     */
    ParkCar selectParkCarById(Long id);

    /**
     * 查询车辆列表
     *
     * @param parkCar 车辆
     * @return 车辆集合
     */
    List<ParkCar> selectParkCarList(ParkCar parkCar);

    /**
     * 查询车辆列表-分页
     *
     * @param search 查询条件
     * @return 分页查询结果
     */
    IPage<ParkCar> selectParkCarPage(ParkCarListSearch search);

    /**
     * 新增车辆
     *
     * @param parkCar 车辆
     * @return 结果
     */
    int insertParkCar(ParkCar parkCar);

    /**
     * 修改车辆
     *
     * @param parkCar 车辆
     * @return 结果
     */
    int updateParkCar(ParkCar parkCar);

    /**
     * 批量删除车辆
     *
     * @param ids 需要删除的车辆ID
     * @return 结果
     */
    int deleteParkCarByIds(List<Long> ids);

    /**
     * 删除车辆信息
     *
     * @param id 车辆ID
     * @return 结果
     */
    int deleteParkCarById(Long id);

    /**
     * 校验车场车牌唯一性
     *
     * @param parkCar 车牌信息
     * @return 校验结果
     */
    ParkCar checkParkPlateUnique(ParkCar parkCar);

    /**
     * 批量新增
     *
     * @param list 待新增车辆列表
     * @return 新增影响行数
     */
    int batchInsert(List<ParkCar> list);

    /**
     * 批量更新
     *
     * @param list 待更新车辆列表
     * @return 更新影响行数
     */
    int batchUpdate(List<ParkCar> list);

    /**
     * 批量查询
     *
     * @param ids 车辆ID列表
     * @return 查询结果
     */
    List<ParkCar> selectBatchIds(List<Long> ids);

    /**
     * 分页查询车辆列表
     *
     * @param parkCarRequest 查询条件
     * @return 查询结果
     */
    PageResult selectPageList(ParkCarRequest parkCarRequest);

    /**
     * 分页查询多位多车列表
     *
     * @param request 查询参数
     * @return 分页查询结果
     */
    PageResult selectParkCarMultPageList(ParkCarRequest request);

    /**
     * 批量更新
     *
     * @param parkCarList 待更新车辆列表
     */
    void batchUpdateList(List<ParkCar> parkCarList);

    /**
     * 批量新增
     *
     * @param parkCarList 待新增车辆列表
     */
    void batchInsertList(List<ParkCar> parkCarList);

    /**
     * 根据管理类型分页查询车辆列表
     *
     * @param request 查询条件
     * @return 分页查询结果
     */
    PageResult selectListByMngType(ParkCarRequest request);

    /**
     * 保存黑名单车辆
     *
     * @param request 请求
     * @return /
     */
    AjaxResult saveBlackCar(BlackCarRequest request);

    /**
     * 查找到了启用日期的车辆信息
     *
     * @param mngType   管理类型
     * @param beginDate 有效期开始时间
     * @return 车辆列表
     */
    List<ParkCar> selectEnableCarList(String mngType, String beginDate);

    /**
     * 查询待导出车辆列表
     *
     * @param parkId 车场ID
     * @return 车辆列表
     */
    List<ParkCar> selectExportCarList(Long parkId);

    /**
     * 根据车场ID和车牌查询车辆信息
     *
     * @param parkId 车场ID
     * @param plate  车牌
     * @return 车辆信息
     */
    ParkCar selectParkCarByParkIdAndPlate(Long parkId, String plate);

    /**
     * @description: 根据用户id查询车辆信息
     * @author: HdongSun
     * @date: 2022/9/21 14:14
     * @param: [userIds]
     * @return: java.util.List<com.xique.park.bean.domain.ParkCar>
     **/
    List<ParkCar> selectParkCarListByUserIds(List<Long> userIds);
}
